home *** CD-ROM | disk | FTP | other *** search
/ Scene Storm / Scene Storm - Volume 1.iso / coding / asm / demos / vectors_landscape / landscape.s < prev    next >
Text File  |  1980-01-03  |  43KB  |  2,221 lines

  1. rout            ;when this is off, the routine-file will be
  2.             ;assembled, on=testing
  3.             
  4. ;debug            ;when this is on, colors in the background will
  5.             ;show how much time the routine needs.
  6.  
  7.  
  8. routinemode    equ    64+16    ;the routinemode !
  9.  
  10.  
  11. ; the first part of the source handles the things that are necessary to
  12. ; show the picture/copper and playing of the routine.
  13. ; the part between the "***" lines is the routine-source.
  14. ; at the bottom of the file, there are the necessary incbin-files who
  15. ; are needed to test the routine.
  16. ; these are saved with "save effect" in videotracker. they are raw
  17. ; data files which can be fonts,pictures,landscapes,vectorobjects
  18. ; etcetra.
  19. ; the incbin-files are put in the "variables" table, in the routine-
  20. ; player-handler
  21. ; the place where it's done can be found by searching for "!!!"
  22.  
  23.  
  24. ;    opt    a+    ;devpac 3 optimize
  25. ;    opt    o+,w-
  26.  
  27.     ifd    rout
  28.     
  29.     ;videotracker routine-test
  30.  
  31.     incdir    "ram:include/"
  32.     include    "exec/types.i"
  33.     include    "graphics/gfxbase.i"
  34.     include    "lvo/graphics_lib.i"
  35.     incdir    'ram:'
  36.  
  37. vew_wid    equ    44
  38. vew_hgt    equ    290
  39. win_hgt    equ    117
  40. win_str    equ    $1a
  41.  
  42.     SECTION    1,CODE_C
  43. tus
  44.     move.l    ($4).w,a6
  45.     sub.l    a1,a1
  46.     jsr    -$126(a6)        ;findtask
  47.     move.l    d0,curtsk
  48.     move.l    d0,a0
  49.     move.l    $b8(a0),tskpri
  50.  
  51.     lea    dosnam,a1        ;doslib openen
  52.     moveq.l    #0,d0
  53.     move.l    (4).w,a6
  54.     jsr    -408(a6)        ;openlib
  55.     move.l    d0,doslib
  56.  
  57.     bsr.s    label5            ;videotracker opstarten
  58.     
  59.     move.l    curtsk,a0
  60.     move.l    tskpri,$b8(a0)
  61.     move.l    ($4).w,a6
  62.     jsr    -$84(a6)        ;forbid
  63.  
  64.     move.l    doslib,a1
  65.     move.l    (4).w,a6
  66.     jsr    -414(a6)        ;closelib
  67.  
  68.     moveq.l    #0,d0
  69.     rts
  70.     
  71. label5
  72.     move.l    (4).w,a6        ;workbench gedoe
  73.     move.b    530(a6),ntscmode    ;50/60 hertz halen
  74.  
  75.     cmp.b    #50,ntscmode        ;ntsc ?
  76.     beq.s    str.ntsc
  77.     move.l    #vew_hgt-56,hogscr    ;set NTSC screen hight
  78. str.ntsc
  79.  
  80.     move.l    (4).w,a6        ;68030 cache off 
  81.     jsr    -120(a6)
  82.  
  83.     btst.b    #1,297(a6)
  84.     beq.s    str.nfc
  85.     lea.l    str.ft,a5
  86.     jsr    -30(a6)
  87. str.nfc
  88.     jsr    -126(a6)
  89.     bra.s    str.fc
  90.     
  91. str.ft
  92.     dc.w    $4e7a,2
  93.     bclr    #0,d0
  94.     bset    #13,d0
  95.     dc.w    $4e7b,2
  96.     rte
  97. str.fc
  98.  
  99.     lea    cprjmp,a2        ;copjmp zetten !
  100.     move.l    #cprbck-8,d0
  101.     move.w    d0,6(a2)
  102.     swap    d0
  103.     move.w    d0,2(a2)
  104.  
  105.     lea    cprbck-8,a2        ;copstr zetten !
  106.     move.l    #cpr,d0
  107.     move.w    d0,6(a2)
  108.     swap    d0
  109.     move.w    d0,2(a2)
  110.  
  111.     bsr    cprsprrem        ;sprites legen
  112.  
  113.     lea    gfxnam,a1        ;graphics lib openen
  114.     move.l    (4).w,a6
  115.     jsr    -408(a6)        ;openlib
  116.     move.l    d0,a6
  117.     move.l    d0,gfxlib
  118.     move.l    38(a6),oldcprlist
  119.  
  120.     bset    #1,$bfe001
  121.     bsr    copbuf            ;copper vullen
  122.  
  123.     bsr    sysoff
  124.  
  125. gadrun
  126.     btst    #6,($bfe001).l
  127.     bne    gadrun
  128.  
  129. scrend
  130. scrend.play
  131.     bsr    syson
  132.  
  133.     move.l    gfxlib,a1
  134.     move.l    (4).w,a6
  135.     jsr    -414(a6)        ;closelib
  136.  
  137. scrend.qb
  138.     moveq.l    #0,d0    
  139.     rts
  140.     
  141.     ;vertical blank interrupt, no blits.
  142.     ;handles counters,interlace,sprite
  143.     ;level 3
  144.  
  145. intvb
  146.     bra.s    intvb.cnt
  147.     dc.l    'VIDU'
  148.     dc.l    'LOOP'
  149. intvb.cnt
  150.     movem.l    d0-d7/a0-a6,-(sp)
  151.     lea    ($dff000).l,a6
  152.  
  153.     move.w    $01e(a6),d0
  154.     btst    #5,d0            ;vblank ?
  155.     bne.s    intvb.vb
  156.  
  157.     bra.s    intcop.end
  158.  
  159. intvb.vb
  160.     bsr    grap
  161.     bsr    palctr            ;palette zetten
  162.     bsr.s    copbuf            ;copper vullen
  163.     
  164. intvb.end
  165.     move.w    #$0020,$09c(a6)    ;vb bit wissen
  166.     movem.l    (sp)+,d0-d7/a0-a6    ;multitask uit, shit !
  167.     rte
  168.  
  169. intcop.end
  170.     movem.l    (sp)+,d0-d7/a0-a6
  171.     move.l    intvbold,-(sp)
  172.     rts
  173.  
  174.     ;transmission buffer empty routine, BLIT !
  175.     ;handles routines,animations
  176.     
  177. inttbe                    ;tbe interrupt
  178.     movem.l    d0-d7/a0-a6,-(sp)
  179.     lea    ($dff000).l,a6
  180.  
  181.     move.w    $01e(a6),d0
  182.     btst    #0,d0            ;no tbe ?
  183.     beq.s    intdskblk
  184.  
  185.  
  186.     btst    #6,($bfe001).l        ;muis ingedrukt ?
  187.     beq.s    inttbe.cop
  188.     btst    #2,($dff016).l
  189.     beq.s    inttbe.cop
  190.  
  191.     ifd    debug
  192.     move.w    #$700,$dff180
  193.     endc
  194.     
  195.     bsr    rotply            ;routineplayer BLIT !
  196.     bsr.s    copbuf            ;copper vullen
  197.  
  198.     ifd    debug
  199.     move.w    #$070,$dff180
  200.     endc
  201.     
  202. inttbe.cop
  203.  
  204. inttbe.end
  205.     move.w    #$0001,$09c(a6)
  206.     movem.l    (sp)+,d0-d7/a0-a6
  207.     rte
  208.  
  209. intdskblk
  210.     move.w    #$0001,$09c(a6)        ;be sure for no tbe handling
  211.     movem.l    (sp)+,d0-d7/a0-a6
  212.     move.l    inttbeold,-(sp)
  213.     rts
  214.  
  215.  
  216.     ;moves the copperbuffer to the copperlist
  217.     ;sort of double buffering
  218.     
  219. copbuf
  220.     movem.l    d0-d7/a0-a6,-(sp)
  221.  
  222.     lea    ($dff000).l,a6
  223.  
  224. copbuf.novb                ;copperchange overslaan
  225.     moveq.l    #0,d0
  226.     move.b    $005(a6),d0
  227.     lsl.w    #8,d0
  228.     moveq.l    #0,d1
  229.     move.b    $006(a6),d1
  230.     add.w    d1,d0
  231.  
  232.     cmp.w    #$4,d0
  233.     blt    copbuf.novb
  234.  
  235.     cmp.b    #50,ntscmode
  236.     beq.s    copbuf.pal
  237.     cmp.w    #$133-56-8,d0        ;ntsc grens
  238.     bge    copbuf.novb
  239.     bra.s    copbuf.cont
  240. copbuf.pal
  241.     cmp.w    #$133-8,d0        ;pal grens
  242.     bge    copbuf.novb
  243. copbuf.cont
  244.  
  245.     lea    gra.s,a0        ;buffer copieren
  246.     lea    cprbuf,a1
  247.  
  248.     move.w    00*4+2(a0),00*4+2(a1)
  249.     move.w    01*4+2(a0),01*4+2(a1)
  250.     move.w    02*4+2(a0),02*4+2(a1)
  251.     move.w    03*4+2(a0),03*4+2(a1)
  252.     move.w    04*4+2(a0),04*4+2(a1)
  253.     move.w    05*4+2(a0),05*4+2(a1)
  254.     move.w    06*4+2(a0),06*4+2(a1)
  255.     move.w    07*4+2(a0),07*4+2(a1)
  256.     move.w    08*4+2(a0),08*4+2(a1)
  257.     move.w    09*4+2(a0),09*4+2(a1)
  258.  
  259.     move.w    10*4+2(a0),10*4+2(a1)
  260.     move.w    11*4+2(a0),11*4+2(a1)
  261.     move.w    12*4+2(a0),12*4+2(a1)
  262.     move.w    13*4+2(a0),13*4+2(a1)
  263.     move.w    14*4+2(a0),14*4+2(a1)
  264.     move.w    15*4+2(a0),15*4+2(a1)
  265.     move.w    16*4+2(a0),16*4+2(a1)
  266.     move.w    17*4+2(a0),17*4+2(a1)
  267.     move.w    18*4+2(a0),18*4+2(a1)
  268.     move.w    19*4+2(a0),19*4+2(a1)
  269.  
  270.     move.w    20*4+2(a0),20*4+2(a1)
  271.     move.w    21*4+2(a0),21*4+2(a1)
  272.     move.w    22*4+2(a0),22*4+2(a1)
  273.     move.w    23*4+2(a0),23*4+2(a1)
  274.     move.w    24*4+2(a0),24*4+2(a1)
  275.     move.w    25*4+2(a0),25*4+2(a1)
  276.     move.w    26*4+2(a0),26*4+2(a1)
  277.     move.w    27*4+2(a0),27*4+2(a1)
  278.     move.w    28*4+2(a0),28*4+2(a1)
  279.     move.w    29*4+2(a0),29*4+2(a1)
  280.  
  281.     move.w    30*4+2(a0),30*4+2(a1)
  282.     move.w    31*4+2(a0),31*4+2(a1)
  283.     move.w    32*4+2(a0),32*4+2(a1)
  284.     move.w    33*4+2(a0),33*4+2(a1)
  285.     move.w    34*4+2(a0),34*4+2(a1)
  286.     move.w    35*4+2(a0),35*4+2(a1)
  287.     move.w    36*4+2(a0),36*4+2(a1)
  288.     move.w    37*4+2(a0),37*4+2(a1)
  289.     move.w    38*4+2(a0),38*4+2(a1)
  290.     move.w    39*4+2(a0),39*4+2(a1)
  291.  
  292.     move.w    40*4+2(a0),40*4+2(a1)
  293.     move.w    41*4+2(a0),41*4+2(a1)
  294.     move.w    42*4+2(a0),42*4+2(a1)
  295.     move.w    43*4+2(a0),43*4+2(a1)
  296.     move.w    44*4+2(a0),44*4+2(a1)
  297.     move.w    45*4+2(a0),45*4+2(a1)
  298.     move.w    46*4+2(a0),46*4+2(a1)
  299.     move.w    47*4+2(a0),47*4+2(a1)
  300.     move.w    48*4+2(a0),48*4+2(a1)
  301.     move.w    49*4+2(a0),49*4+2(a1)
  302.  
  303.     move.w    50*4+2(a0),50*4+2(a1)
  304.     move.w    51*4+2(a0),51*4+2(a1)
  305.     move.w    52*4+2(a0),52*4+2(a1)
  306.     move.w    53*4+2(a0),53*4+2(a1)
  307.     move.w    54*4+2(a0),54*4+2(a1)
  308.  
  309. copbuf.end
  310.     movem.l    (sp)+,d0-d7/a0-a6
  311.     rts
  312.  
  313.     ;goes back to the workbench
  314.     
  315. syson
  316.     movem.l    d0-d7/a0-a6,-(sp)
  317.  
  318.     move.w    #$0001,$dff09a        ;tbeint uit
  319.     move.l    intvbold,($6c).w
  320.     move.l    inttbeold,($64).w
  321.  
  322.     move.l    4,a6
  323.     jsr    -138(a6)        ;permit
  324.  
  325.     move.l    gfxlib,a6
  326.     jsr    -462(a6)        ;disownblitter
  327.  
  328.     move.l    wbview,a1
  329.     move.l    gfxlib,a6
  330.     jsr    _LVOLoadView(a6)     ; Fix view
  331.     jsr    _LVOWaitTOF(a6)
  332.     jsr    _LVOWaitTOF(a6)         ; wait for LoadView()
  333.  
  334. syson.ras
  335.     cmp.b    #$c0,$dff006        ;prevent copperjump
  336.     bne    syson.ras
  337.  
  338.     move.l    gfxlib,a6
  339.     move.l    gb_copinit(a6),$dff080     ; Kick it into life
  340.  
  341.     movem.l    (sp)+,d0-d7/a0-a6
  342.     rts
  343.     
  344.     ;goes back to the gadgetscreen
  345.     
  346. sysoff
  347.     movem.l    d0-d7/a0-a6,-(sp)
  348.      
  349.     move.l    gfxlib,a6
  350.     move.l    gb_ActiView(a6),wbview    ;current view
  351.     sub.l    a1,a1            ; clear a1
  352.     jsr     _LVOLoadView(a6)     ; Flush View to nothing
  353.     jsr    _LVOWaitTOF(a6)     ; Wait once
  354.     jsr    _LVOWaitTOF(a6)     ; Wait again.
  355.  
  356.     move.l    gfxlib,a6
  357.     jsr    -456(a6)        ;ownblitter
  358.  
  359.     move.l    4,a6
  360.     jsr    -132(a6)        ;forbid
  361.         
  362.     move.l    ($6c).w,intvbold
  363.     move.l    #intvb,($6c).w
  364.     move.l    ($64).w,inttbeold
  365.     move.l    #inttbe,($64).w
  366.     move.w    #$8001,$dff09a        ;tbeint aan
  367.     bsr    gracpr            ;reset copper
  368.     bsr    copbuf            ;copy copper
  369.     move.l    #cpr,$dff080
  370.  
  371.     movem.l    (sp)+,d0-d7/a0-a6
  372.     rts
  373.     
  374. cprsprrem
  375.     movem.l    d0-d7/a0-a6,-(sp)
  376.     lea    cprspr,a0
  377.     move.l    #sprdat,d0
  378.     move.w    #7,d1
  379. cprsprrem.a
  380.     move.w    d0,3*2(a0)
  381.     swap    d0
  382.     move.w    d0,1*2(a0)
  383.     swap    d0
  384.     add.l    #8,a0
  385.     dbra    d1,cprsprrem.a
  386.     movem.l    (sp)+,d0-d7/a0-a6
  387.     rts
  388.  
  389. varset                    ;variablen neerzetten
  390.     movem.l    d0-d7/a0-a6,-(sp)
  391.     move.l    #var,a0
  392.  
  393.     move.l    #cprbck,var_cprbck(a0)
  394.     move.l    gfxlib,var__GfxBase(a0)
  395.     move.b    ntscmode,var_ntsc(a0)
  396.  
  397.     move.l    curpic1,var_pic1(a0)    ;variabel
  398.     move.l    curpic2,var_pic2(a0)    ;variabel
  399.     move.w    anispd1,var_anispd1(a0)
  400.     move.w    anitel1,var_anitel1(a0)
  401.     movem.l    (sp)+,d0-d7/a0-a6
  402.     rts
  403.     
  404.     ;this routine handles all videotracker-routines
  405.  
  406. rotply    
  407.     movem.l    d0-d7/a0-a6,-(sp)
  408.  
  409.     moveq.l    #0,d0
  410.  
  411.     lea    currot1,a2        ;routine 1
  412.     move.w    rotinf1,d0        ;routine info
  413.     bsr.s    rotplyr
  414.  
  415. rotply.end
  416.     movem.l    (sp)+,d0-d7/a0-a6
  417.     rts
  418.  
  419.     ;this routine handles 1 routine, BLIT !
  420.     
  421. rotplyr
  422.     movem.l    d0-d7/a1-a6,-(sp)
  423.  
  424.     move.l    #rot,(a2)        ;routinestart address
  425.  
  426.     move.b    #50,ntscmode        ;ntsc/pal hz
  427.     clr.l    curpic2            ;background picture
  428.     move.w    #1,anispd1        ;animationspeed
  429.     clr.w    anitel1            ;animation position
  430.  
  431.     lea    var,a0            ;communication-table
  432.  
  433.     move.l    #rotinc,var_lnd(a0)    ;incbinfile !!!
  434.  
  435.     move.l    #routinemode,d0        ;routinemode !!!
  436.  
  437.     sub.l    a0,a0            ;picture info legen
  438.  
  439.     tst.l    (a2)            ;is er een routine ?
  440.     beq    rotplyr.end        ;interlace handling
  441.  
  442.     move.l    intdel,d2        ;delay
  443.     move.l    inttel,d1        ;teller
  444.     cmp.w    d2,d1
  445.     blt    rotplyr.end
  446.     clr.l    inttel
  447.                 
  448.     bsr    varset            ;variabelen updaten
  449.  
  450.     move.l    (a2),a1            ;routine halen
  451.     move.l    #var,a0            ;variablen tabel
  452.  
  453.     movem.l    d3-d7/a1-a6,-(sp)
  454.     moveq.l    #0,d1            ;vars wissen
  455.     moveq.l    #0,d2
  456.     moveq.l    #0,d3
  457.     moveq.l    #0,d4
  458.     moveq.l    #0,d5
  459.     moveq.l    #0,d6
  460.     moveq.l    #0,d7
  461.     sub.l    a2,a2
  462.     sub.l    a3,a3
  463.     sub.l    a4,a4
  464.     sub.l    a5,a5
  465.  
  466.     jsr    4(a1)            ;routine afwerken
  467.     movem.l    (sp)+,d3-d7/a1-a6
  468.  
  469.     ;Routine:
  470.     ;
  471.     ;Input:
  472.     ;a0=variabelentabel
  473.     ;d0=routinemode
  474.     ;
  475.     ;Output:
  476.     ;a0=picture
  477.     ;d1=copperlist
  478.     ;d2=interruptdelay        (NOT used till now)
  479.     
  480.     move.w    #$0020,$dff09a        ;vb off !
  481.  
  482.     move.l    d2,intdel        ;delay
  483.  
  484.     lea    cprjmp,a3
  485.     move.l    #cprbck-8,d0
  486.  
  487.     cmp.l    (a2),a1            ;routine ondertussen gewipt ?
  488.     bne.s    rotplyr.nocop
  489.     tst.l    d1            ;copperlist ?
  490.     beq.s    rotplyr.nocop
  491.     move.l    d1,d0
  492. rotplyr.nocop
  493.     move.w    d0,6(a3)
  494.     swap    d0
  495.     move.w    d0,2(a3)
  496.  
  497.     cmp.l    #0,a0            ;picture ?
  498.     beq.s    rotplyr.endvb
  499.  
  500.     move.l    a0,curpic1        ;current picture (cycle)
  501.     move.l    a0,curpal1        ;current palette
  502.  
  503.     tst.b    rotdpl            ;plane is geleverd
  504.     beq.s    rotplyr.set
  505.     clr.b    rotdpl
  506.     clr.l    cycdel1            ;cycle info wissen
  507.     clr.l    4+cycdel1
  508.     clr.l    curfrm1            ;curfrm1, altijd planes zetten
  509. rotplyr.set
  510.     clr.b    dplctr
  511.     bsr.s    grap
  512.     bsr    grac            ;colorset
  513. rotplyr.endvb
  514.     move.w    #$8020,$dff09a
  515. rotplyr.end
  516.     movem.l    (sp)+,d0-d7/a1-a6
  517.     rts
  518.  
  519.     ;removes possible routine-coppers
  520.     
  521. gracpr
  522.     movem.l    d0-d7/a0-a6,-(sp)
  523.     lea    cprjmp,a3
  524.     move.l    #cprbck-8,d0        ;copperlist resetten
  525.     move.w    d0,6(a3)
  526.     swap    d0
  527.     move.w    d0,2(a3)
  528.     movem.l    (sp)+,d0-d7/a0-a6
  529.     rts
  530.  
  531.     ;picture-to-copper routine, communicates with the
  532.     ;anim-player
  533.     
  534. grap                    ;d7=anim
  535.     movem.l    d0-d7/a0-a6,-(sp)
  536.  
  537.     clr.l    d7
  538.     
  539.     tst.l    curpic1            ;current picture ?
  540.     beq    grap.end
  541.  
  542.     move.l    curpic1,a2        ;normal pic halen
  543.  
  544.     lea    gracprscr,a1        ;window neerzetten
  545.     move.l    hogscr,d1
  546.  
  547.     move.w    pic_hgt(a2),d3        ;pic hoogte
  548.     move.w    pic_vew(a2),d5
  549.     btst    #2,d5            ;interlace ?
  550.     beq.s    grap.nohi4
  551.     lsr.w    #1,d3            ;/2
  552. grap.nohi4
  553.     cmp.w    d3,d1
  554.     bge.s    grap.hog
  555.     move.w    d1,d3
  556. grap.hog
  557.     sub.w    d3,d1
  558.     lsr.w    #1,d1
  559.     add.w    #win_str,d1
  560.     move.w    d1,d2
  561.     add.w    d3,d2
  562.  
  563.  
  564.     move.b    d1,2(a1)        ;y start
  565.     move.b    d2,6(a1)        ;y end
  566.  
  567.     move.w    pic_wid(a2),d4        ;pic breedte in bytes
  568.     lsl.l    #3,d4
  569.  
  570.     move.l    #vew_wid*8,d0
  571.     move.l    #0,d1
  572.     move.l    #$71,d6
  573.  
  574.     move.w    pic_vew(a2),d5
  575.     btst    #15,d5            ;hires ?
  576.     beq.s    grap.nohi2
  577.  
  578.     move.l    #(vew_wid-4)*8*2,d0
  579.     move.l    #1,d1
  580.     move.l    #$81,d6
  581.  
  582.     cmp.w    #80,pic_wid(a2)        ;overscan ?
  583.     ble.s    grap.nohi2
  584.     move.l    #(vew_wid)*8*2,d0
  585.     move.l    #$61,d6
  586.  
  587. grap.nohi2    
  588.     btst    #6,d5            ;super hires ?
  589.     beq.s    grap.noshi2
  590.  
  591.     move.l    #(vew_wid-4)*8*4,d0
  592.     move.l    #2,d1
  593.     move.l    #$81,d6
  594.  
  595.     cmp.w    #80*2,pic_wid(a2)    ;overscan ?
  596.     ble.s    grap.noshi2
  597.     move.l    #(vew_wid)*8*4,d0
  598.     move.l    #$61,d6
  599.  
  600. grap.noshi2    
  601.  
  602.     clr.w    d5
  603.     cmp.w    d0,d4            ;breeder dan scherm ?
  604.     ble.s    grap.c
  605.     move.w    d4,d5
  606.     move.w    d0,d4
  607.     sub.w    d0,d5            ;modulo
  608.     lsr.w    #3,d5            ;/8
  609. grap.c
  610.     lsr.w    d1,d0
  611.     lsr.w    d1,d4
  612.  
  613.     move.w    d0,d2
  614.     sub.w    d4,d2
  615.     lsr.w    #1,d2            ;/2
  616.  
  617.     add.w    d6,d2
  618.     move.b    d2,3(a1)        ;x start
  619.     move.w    d2,d3            ;d3 bewaren !
  620.  
  621.     add.w    d4,d2            ;d4 bewaren !
  622.     move.b    d2,7(a1)        ;x end
  623.     
  624.     move.w    pic_vew(a2),d6
  625.     btst    #15,d6            ;hires ?
  626.     beq.s    grap.nohi5    
  627.     add.l    d4,d4            ;*2
  628. grap.nohi5
  629.     btst    #6,d6            ;super hires ?
  630.     beq.s    grap.noshi5    
  631.     add.l    d4,d4            ;*4
  632. grap.noshi5
  633.  
  634.     move.l    d7,-(sp)
  635.     move.w    pic_vew(a2),d6
  636.     move.l    #17,d0
  637.     move.l    #1,d1
  638.     move.l    #3,d7
  639.  
  640.     btst    #15,d6            ;hires ?
  641.     beq.s    grap.nohi3    
  642.     move.l    #9,d0
  643.     move.l    #2,d1
  644.     move.l    #2,d7
  645. grap.nohi3
  646.     btst    #6,d6            ;super hires ?
  647.     beq.s    grap.noshi3    
  648.     move.l    #9,d0
  649.     move.l    #2,d1
  650.     move.l    #1,d7
  651. grap.noshi3
  652.     sub.w    d0,d3
  653.     lsr.w    #1,d3
  654.     move.w    d3,10(a1)        ;ddfstrt
  655.     
  656.     move.w    d4,d2            ;pic breedte in pixels
  657.     lsr.w    #4,d2            ;/16
  658.     sub.w    d1,d2            ;-1
  659.  
  660.     lsl.w    d7,d2            ;*8
  661.     add.w    d2,d3
  662.     move.w    d3,14(a1)        ;ddfstop
  663.     move.l    (sp)+,d7
  664.     
  665.     lea    pic_raw(a2),a0
  666.  
  667.     moveq.l    #0,d2
  668.     move.w    pic_dpt(a2),d2
  669.     sub.l    #1,d2
  670.     muls    pic_wid(a2),d2
  671.     add.w    d2,d5
  672.  
  673.     move.w    pic_vew(a2),d2        ;viewmode add
  674.     btst    #2,d2
  675.     beq.s    grap.nolace4
  676.  
  677.     moveq.l    #0,d2
  678.     move.w    pic_dpt(a2),d2
  679.     muls    pic_wid(a2),d2
  680.     add.w    d2,d5            ;interlace gedoe
  681. grap.nolace4
  682.  
  683.     lea    gracprbpl,a4        ;iffpln neerzetten
  684.     lea    gracprpln,a0        ;iffpln neerzetten
  685.     moveq.l    #0,d2
  686.     move.w    pic_dpt(a2),d2        ;plnnummer 1 halen
  687.     move.l    #8,d6            ;copper step !
  688.  
  689.     tst.l    curpic2            ;2de picture ?
  690.     bne.s    grap.pic2
  691. grap.nopic2
  692.     move.w    d5,34(a1)        ;modulo oneven zetten
  693.     bra    grap.nodpl
  694. grap.pic2
  695.     move.l    curpic2,a3        ;oneven plane
  696.     move.l    currot2,a5        ;oneven plane
  697.     clr.l    curpic2            ;mischien niet goed
  698.     clr.l    curpal2            ;mischien niet goed
  699.     clr.l    currot2            ;mischien niet goed
  700.  
  701.     cmp.l    curpic1,a3        ;picture hetzelfde ?
  702.     beq    grap.nopic2
  703.     
  704.     cmp.l    #0,currot1        ;routine ?    
  705.     beq.s    grap.norot
  706.     cmp.l    currot1,a5        ;routine hetzelfde ?
  707.     beq    grap.nopic2
  708. grap.norot
  709.  
  710.     cmp.b    #3,d2            ;> 8 kleuren ?
  711.     bgt    grap.nopic2
  712.     move.w    pic_dpt(a3),d3        ;plnnummer 2 halen
  713.     cmp.b    d2,d3            ;gelijke plnummers ?
  714.     bne    grap.nopic2
  715.     move.w    pic_vew(a2),d1
  716.     cmp.w    pic_vew(a3),d1        ;view gelijk ?
  717.     bne    grap.nopic2
  718.  
  719.     move.w    pic_vew(a2),d1        ;groter dan view test
  720.     btst    #6,d1            ;super hires ?
  721.     beq.s    grap.nohi2a
  722.     move.l    #vew_wid*4,d1
  723.     bra.s    grap.nohi2b
  724. grap.nohi2a
  725.     btst    #15,d1            ;hires ?
  726.     beq.s    grap.noshi2a
  727.     move.l    #vew_wid*2,d1
  728.     bra.s    grap.nohi2b
  729. grap.noshi2a
  730.     move.l    #vew_wid,d1
  731. grap.nohi2b
  732.     cmp.w    pic_wid(a2),d1        ;breder dan view ?
  733.     bgt.s    grap.small
  734.     cmp.w    pic_wid(a3),d1        ;breder dan view ?
  735.     bgt.s    grap.small
  736.  
  737.     move.w    pic_vew(a2),d1
  738.     btst    #2,d1
  739.     beq.s    grap.nolace8a
  740.     move.l    hogscr,d1
  741.     add.l    d1,d1
  742.     bra.s    grap.nolace8b
  743. grap.nolace8a
  744.     move.l    hogscr,d1
  745. grap.nolace8b
  746.     cmp.w    pic_hgt(a2),d1        ;hoger dan view ?
  747.     bgt.s    grap.small
  748.     cmp.w    pic_hgt(a3),d1        ;hoger dan view ?
  749.     bgt.s    grap.small
  750.     bra.s    grap.big
  751.  
  752. grap.small
  753.     move.w    pic_hgt(a2),d1        ;wid+hgt<vew
  754.     cmp.w    pic_hgt(a3),d1        ;hoogte gelijk ?
  755.     bne    grap.nopic2
  756.     move.w    pic_wid(a2),d1
  757.     cmp.w    pic_wid(a3),d1        ;breedte gelijk ?
  758.     bne    grap.nopic2
  759.  
  760. grap.big
  761.     move.l    a3,curpic2
  762.     move.l    a3,curpal2
  763.     move.l    a5,currot2
  764.  
  765.     tst.b    dplctr            ;double playfield al gezet ?
  766.     beq.s    grap.nocop
  767.  
  768.     move.w    30(a1),34(a1)        ;modulo copieren
  769.  
  770.     move.w    2(a4),d1        ;bplcon0
  771.     btst    #10,d1            ;al double playfield ?
  772.     beq.s    grap.ta
  773.  
  774.     move.w    2(a0),10(a0)        ;plane 0>1 copieren
  775.     move.w    6(a0),14(a0)
  776.  
  777.     move.w    18(a0),26(a0)        ;plane 2>3 copieren
  778.     move.w    22(a0),30(a0)
  779.  
  780.     move.w    34(a0),42(a0)        ;plane 4>5 copieren
  781.     move.w    38(a0),46(a0)
  782.  
  783.     bra.s    grap.tb
  784. grap.ta
  785.     move.w    18(a0),42(a0)        ;plane 2>5 copieren
  786.     move.w    22(a0),46(a0)
  787.  
  788.     move.w    10(a0),26(a0)        ;plane 1>3 copieren
  789.     move.w    14(a0),30(a0)
  790.  
  791.     move.w    2(a0),10(a0)        ;plane 0>1 copieren
  792.     move.w    6(a0),14(a0)
  793.  
  794. grap.tb
  795.     move.l    #palette,a3        ;palette copieren
  796.  
  797.     move.w    #8-1,d1
  798. grap.pal
  799.     move.w    (a3)+,14(a3)
  800.     dbra    d1,grap.pal
  801.  
  802. grap.nocop
  803.     add.w    d3,d2
  804.     lsl.w    #8,d2
  805.     lsl.w    #4,d2
  806.     or.w    #$400,d2
  807.     move.w    d2,2(a4)        ;bplcon0
  808.  
  809.     movem.l    d0-d7/a0-a6,-(sp)
  810.  
  811.     move.l    curpic,a2        ;animpic ?
  812.     move.l    curfrm,d7
  813.     cmp.l    #0,a2
  814.     bne.s    grap.noanipic
  815.  
  816.     move.l    curpic2,a2        ;normal pic ?
  817.     move.l    curfrm2,d7
  818.     cmp.l    #0,a2
  819.     beq.s    grap.nodplpic
  820.  
  821. grap.noanipic
  822.     add.l    d6,a0
  823.     add.w    d6,d6
  824.     bsr.s    grappln            ;a2,d6,d7,d0
  825. grap.nodplpic
  826.     movem.l    (sp)+,d0-d7/a0-a6
  827.     add.w    d6,d6
  828.     bra.s    grap.nodpla
  829.  
  830.  
  831. grap.nodpl                ;geen double playfield
  832.     lsl.w    #8,d2
  833.     lsl.w    #4,d2
  834.     move.w    d2,2(a4)        ;bplcon0
  835.  
  836. grap.nodpla
  837.     move.w    d5,30(a1)        ;modulo even
  838.  
  839.     moveq.l    #0,d3
  840.     add.w    pic_vew(a2),d3        ;viewmode add
  841.     moveq.l    #0,d2
  842.     move.w    2(a4),d2
  843.     or.l    d3,d2
  844.     or.l    #$300,d2        ;genlock info
  845.     move.w    d2,2(a4)
  846.     
  847.     bsr.s    grappln            ;a2,d6,d7,d0
  848.  
  849. grap.end
  850.     
  851.     movem.l    (sp)+,d0-d7/a0-a6
  852.     rts
  853.         
  854.  
  855.     ;sets on of the 2 possible pictures to the copper
  856.     ;handles interlace
  857.  
  858.     ;d7=framenummer
  859.     ;d6=copperliststap
  860.     ;d0=raw planes positie
  861.     ;a2=current picture
  862. grappln                    ;planes invullen 
  863.     movem.l    d0-d7/a0-a6,-(sp)
  864.  
  865.     lea    pic_raw(a2),a1
  866.     move.l    a1,d0            ;raw planes
  867.     
  868.     moveq.l    #0,d2            ;x*y
  869.     move.w    pic_wid(a2),d2
  870.     lsr.l    #1,d2            ;/2
  871.     moveq.l    #0,d3
  872.     move.w    pic_hgt(a2),d3
  873.     muls    d3,d2
  874.     
  875.     move.l    d2,d4
  876.     add.l    d2,d2
  877.  
  878.     move.w    pic_dpt(a2),d3
  879.     muls    d3,d4            ;hele picture size
  880.     muls    d7,d4            ;frame*size d7 !
  881.  
  882.     add.l    d4,d4
  883.  
  884.     add.l    d4,d0
  885.  
  886.     move.l    #vew_wid,d5        ;max x view
  887.     move.l    hogscr,d4        ;max y view
  888.     move.w    pic_vew(a2),d1        ;viewmode add
  889.     btst    #2,d1
  890.     beq.s    grappln.nolace
  891.     add.l    d4,d4            ;max y view
  892. grappln.nolace
  893.     btst    #15,d1            ;hires ?
  894.     beq.s    grappln.nohi
  895.     move.l    #vew_wid*2,d5        ;max x view
  896. grappln.nohi
  897.     btst    #6,d1            ;super hires ?
  898.     beq.s    grappln.noshi
  899.     move.l    #vew_wid*4,d5        ;max x view
  900. grappln.noshi
  901.  
  902.     moveq.l    #0,d3            ;scherm centreren
  903.     move.w    pic_wid(a2),d3        ;pic breedte in bytes
  904.     cmp.w    d5,d3            ;breder dan scherm ?
  905.     ble.s    grappln.qa
  906.     sub.w    d5,d3            ;-scherm breedte
  907.     lsr.w    #2,d3            ;/4
  908.  
  909.     add.l    d3,d3
  910.  
  911.     add.l    d3,d0
  912. grappln.qa
  913.     move.w    pic_hgt(a2),d3        ;pic hoogte in bytes
  914.     cmp.w    d4,d3            ;hoger dan scherm ?
  915.     ble.s    grappln.qb
  916.     sub.w    d4,d3            ;-scherm breedte
  917.     lsr.w    #1,d3            ;/2
  918.     moveq.l    #0,d5
  919.     move.w    pic_wid(a2),d5        ;pic breedte in bytes
  920.     muls    pic_dpt(a2),d5
  921.     muls    d5,d3
  922.     add.l    d3,d0
  923. grappln.qb
  924.     moveq.l    #0,d2
  925.     move.w    pic_wid(a2),d2
  926.  
  927.     move.w    pic_vew(a2),d5        ;interlace flipping ?
  928.     btst    #2,d5
  929.     beq.s    grappln.nolac7b
  930.  
  931.     move.w    $04(a6),d5        ;even/oneven ?
  932.     btst    #15,d5
  933.     beq.s    grappln.nolac7b
  934.     
  935.     moveq.l    #0,d3
  936.     move.w    pic_wid(a2),d3
  937.     muls    pic_dpt(a2),d3
  938.     add.l    d3,d0
  939. grappln.nolac7b
  940.  
  941.     move.w    pic_dpt(a2),d1        ;plnnummer 1 halen
  942.     tst.w    d1            ;0 planes ?
  943.     beq.s    grappln.end
  944.     sub.w    #1,d1
  945. grappln.a
  946.     move.w    d0,3*2(a0)
  947.     swap    d0
  948.     move.w    d0,1*2(a0)
  949.     swap    d0
  950.     add.l    d6,a0            ;d6=copper step !
  951.     add.l    d2,d0
  952.     dbra    d1,grappln.a
  953. grappln.end
  954.     movem.l    (sp)+,d0-d7/a0-a6
  955.     rts
  956.  
  957.     ;sets palettes to copper
  958.     
  959. grac
  960.     movem.l    d0-d7/a0-a6,-(sp)
  961.  
  962.     lea    curpal1,a3        ;palette 1
  963.     move.l    #palette,a1
  964.     bsr.s    gracfrm
  965.  
  966.     lea    curpal2,a3        ;palette 2 (dpl)
  967.     move.l    #8*2+palette,a1
  968.     bsr.s    gracfrm
  969.     
  970.     bsr.s    palctr            ;palette-buffer to copper
  971. grac.end
  972.     movem.l    (sp)+,d0-d7/a0-a6
  973.     rts
  974.         
  975.     ;moves palette from picture to palette-buffer
  976.  
  977. gracfrm
  978.     movem.l    d0-d7/a0-a6,-(sp)
  979.     tst.l    (a3)            ;palette aanwezig ?
  980.     beq.s    gracfrm.end
  981.  
  982.     move.l    (a3),a2            ;current palette
  983.     
  984.     cmp.l    #'PALE',(a2)        ;palette ?
  985.     bne.s    gracfrm.pict
  986.     lea    6(a2),a0        ;palette
  987.     move.w    4(a2),d0        ;aantal kleuren
  988.     bra.s    gracfrm.col
  989. gracfrm.pict
  990.     cmp.l    #'ANIM',(a2)        ;animatie ?
  991.     bne.s    gracfrm.noanim
  992.  
  993.     moveq.l    #0,d1
  994.     move.w    pic_ani(a2),d1
  995.     bclr    #7,d1            ;behandelbit weghalen
  996.  
  997.     moveq.l    #0,d3
  998.     move.w    pic_wid(a2),d3
  999.     lsr.w    #1,d3            ;/2
  1000.     muls    pic_hgt(a2),d3
  1001.     muls    pic_dpt(a2),d3
  1002.  
  1003.     add.l    d3,d3
  1004.  
  1005.     add.l    #pic_raw,d3
  1006.     move.l    d3,d5
  1007.  
  1008.     btst    #0,d1
  1009.     bne.s    gracfrm.buf2
  1010.     moveq.l    #0,d5
  1011. gracfrm.buf2
  1012.     add.l    d5,a2
  1013. gracfrm.noanim
  1014.     lea    pic_pal(a2),a0        ;palette
  1015.     move.w    pic_palnum(a2),d0
  1016.  
  1017.     cmp.w    #32-1,d0        ;niet meer dan 32 kleuren
  1018.     ble    gracfrm.sub
  1019.     move.w    #32-1,d0
  1020. gracfrm.sub
  1021.  
  1022.     tst.w    d0            ;0 planes ?
  1023.     beq.s    gracfrm.end
  1024. gracfrm.col
  1025. gracfrm.fa
  1026.     move.w    (a0)+,(a1)+
  1027.     dbra    d0,gracfrm.fa
  1028. gracfrm.end
  1029.     movem.l    (sp)+,d0-d7/a0-a6
  1030.     rts
  1031.     
  1032.     ;handles colorcycling in the palette-buffer
  1033.     ;and copies palette-buffer to copper
  1034.  
  1035. palctr
  1036.     movem.l    d0-d7/a0-a6,-(sp)
  1037.  
  1038.     move.l    curpic1,a2        ;current raw
  1039.     cmp.l    #0,a2
  1040.     beq.s    palctr.qb
  1041.     lea    cycdel1,a3        ;cycle delays
  1042.     move.l    #palette,a4
  1043.     bsr    palcyc
  1044. palctr.qb
  1045.     move.l    curpic2,a2        ;current raw
  1046.     cmp.l    #0,a2
  1047.     beq.s    palctr.c
  1048.     lea    cycdel2,a3        ;cycle delays
  1049.     move.l    #8*2+palette,a4
  1050.     bsr    palcyc
  1051.  
  1052. palctr.c
  1053.     lea    gracprcol,a1
  1054.     move.l    #palette,a0
  1055.  
  1056.     move.w    00(a0),00*4+2(a1)
  1057.     move.w    02(a0),01*4+2(a1)
  1058.     move.w    04(a0),02*4+2(a1)
  1059.     move.w    06(a0),03*4+2(a1)
  1060.     move.w    08(a0),04*4+2(a1)
  1061.     move.w    10(a0),05*4+2(a1)
  1062.     move.w    12(a0),06*4+2(a1)
  1063.     move.w    14(a0),07*4+2(a1)
  1064.     move.w    16(a0),08*4+2(a1)
  1065.     move.w    18(a0),09*4+2(a1)
  1066.  
  1067.     move.w    20(a0),10*4+2(a1)
  1068.     move.w    22(a0),11*4+2(a1)
  1069.     move.w    24(a0),12*4+2(a1)
  1070.     move.w    26(a0),13*4+2(a1)
  1071.     move.w    28(a0),14*4+2(a1)
  1072.     move.w    30(a0),15*4+2(a1)
  1073.     move.w    32(a0),16*4+2(a1)
  1074.     move.w    34(a0),17*4+2(a1)
  1075.     move.w    36(a0),18*4+2(a1)
  1076.     move.w    38(a0),19*4+2(a1)
  1077.  
  1078.     move.w    40(a0),20*4+2(a1)
  1079.     move.w    42(a0),21*4+2(a1)
  1080.     move.w    44(a0),22*4+2(a1)
  1081.     move.w    46(a0),23*4+2(a1)
  1082.     move.w    48(a0),24*4+2(a1)
  1083.     move.w    50(a0),25*4+2(a1)
  1084.     move.w    52(a0),26*4+2(a1)
  1085.     move.w    54(a0),27*4+2(a1)
  1086.     move.w    56(a0),28*4+2(a1)
  1087.     move.w    58(a0),29*4+2(a1)
  1088.  
  1089.     move.w    60(a0),30*4+2(a1)
  1090.     move.w    62(a0),31*4+2(a1)
  1091.  
  1092.     movem.l    (sp)+,d0-d7/a0-a6
  1093.     rts
  1094.  
  1095.     ;colorcyclinghandling of a palette
  1096.  
  1097. palcyc
  1098.     movem.l    d0-d7/a0-a6,-(sp)
  1099.     move.w    #4-1,d7            ;4 cycles
  1100. palcyc.d
  1101.     tst.w    (a3)+            ;delay klaar ?
  1102.     bne.s    palcyc.c
  1103.     
  1104.     moveq.l    #0,d1
  1105.     move.b    pic_cycstr(a2),d1    ;start color
  1106.     lsl.b    #1,d1        ;*2
  1107.  
  1108.     moveq.l    #0,d2
  1109.     move.b    pic_cycend(a2),d2    ;end color
  1110.     lsl.b    #1,d2        ;*2
  1111.  
  1112.     moveq.l    #0,d3
  1113.     move.b    pic_cycadd(a2),d3    ;richting
  1114.  
  1115.     move.l    a4,a0            ;palette pointer
  1116.     move.l    a0,a1
  1117.     add.l    d1,a0            ;startcolor
  1118.     add.l    d2,a1            ;endcolor
  1119.     
  1120.     cmp.b    #1,d3            ;omhoog
  1121.     beq.s    palcyc.up
  1122.     cmp.b    #3,d3            ;omlaag
  1123.     beq.s    palcyc.down
  1124.     bra.s    palcyc.i
  1125.  
  1126. palcyc.up                ;kleuren copieren
  1127.     move.w    (a1),d4            ;laatst color bewaren
  1128. palcyc.f                ;kleuren copieren
  1129.     cmp.l    a0,a1
  1130.     beq.s    palcyc.fa
  1131.     move.w    -(a1),2(a1)
  1132.     bra    palcyc.f
  1133. palcyc.fa
  1134.     move.w    d4,(a1)
  1135.     bra.s    palcyc.g    
  1136.     
  1137. palcyc.down
  1138.     move.w    (a0),d4            ;laatst color bewaren
  1139. palcyc.h                ;kleuren copieren
  1140.     cmp.l    a0,a1
  1141.     beq.s    palcyc.ha
  1142.     move.w    2(a0),(a0)+
  1143.     bra    palcyc.h
  1144. palcyc.ha
  1145.     move.w    d4,(a1)
  1146.  
  1147. palcyc.g
  1148.     move.b    pic_cycspd(a2),-1(a3)    ;delay zetten
  1149.     bra.s    palcyc.i
  1150. palcyc.c
  1151.     sub.w    #1,-2(a3)        ;cycle delay aftellen
  1152. palcyc.i
  1153.     add.l    #4,a2            ;next cycle info
  1154.     dbra    d7,palcyc.d
  1155.  
  1156. palcyc.qb
  1157.     movem.l    (sp)+,d0-d7/a0-a6
  1158.     rts
  1159.  
  1160.  
  1161. ;    SECTION    variabelen,DATA_c
  1162.  
  1163.     cnop    0,2
  1164. curtsk        dc.l    0
  1165. tskpri        dc.l    0
  1166. duplok        dc.l    0
  1167. inttel        dc.l    0
  1168. intdel        dc.l    0
  1169.  
  1170. form        dc.l    0
  1171. ifffil        dc.l    0
  1172. intvbold    dc.l    0
  1173. inttbeold    dc.l    0
  1174. patpos        dc.l    0
  1175. gfxlib        dc.l    0
  1176. doslib        dc.l    0
  1177. wbview      dc.l    0
  1178. mt_data        dc.l    0
  1179. memvid        dc.l    0
  1180. oldcprlist    dc.l    0
  1181. hogscr        dc.l    vew_hgt
  1182.  
  1183. inspos        dc.l    -1
  1184. anispd1        dc.w    1    ;nooit op 0 !
  1185. anispd2        dc.w    1
  1186.  
  1187.         cnop    0,2
  1188. varclr.s            ;start wissen
  1189. oldrot        dc.l    0
  1190. curpic        dc.l    0
  1191. curfrm        dc.l    0
  1192. cycdel1        ds.w    4
  1193. cycdel2        ds.w    4
  1194.  
  1195. rotinf1        dc.w    0
  1196. rotinf2        dc.w    0
  1197.  
  1198. effspd        dc.w    0
  1199. efflop        dc.b    0
  1200. anilop1        dc.b    0
  1201. anilop2        dc.b    0
  1202. anipal1        dc.b    0
  1203. anipal2        dc.b    0
  1204. rotdpl        dc.b    1
  1205. dplctr        dc.b    0
  1206.         cnop    0,2
  1207.  
  1208. insdat        ds.l    4
  1209. inspri        dc.l    0
  1210. instel        dc.w    0
  1211.  
  1212. cureff        dc.l    0
  1213. efftel        dc.w    0
  1214.  
  1215. curpal1        dc.l    0
  1216. curpal2        dc.l    0
  1217. currot1        dc.l    0
  1218. currot2        dc.l    0
  1219. curpic1        dc.l    0
  1220. curpic2        dc.l    0
  1221. anitel1        dc.w    0
  1222. anitel2        dc.w    0
  1223. curfrm1        dc.l    0
  1224. curfrm2        dc.l    0
  1225. oldfrm1        dc.l    0
  1226. oldfrm2        dc.l    0
  1227.  
  1228. varclr.e
  1229.         dc.l    0            ;wisruimte
  1230.     
  1231. varclr.ql    equ    varclr.e-varclr.s    ;wislengte
  1232.     
  1233. ;ownblit    dc.b    0
  1234. ntscmode    dc.b    0
  1235. end        dc.b    0
  1236.  
  1237. pronam    dc.b    'VideoTracker',0
  1238.     cnop    0,2
  1239. dosnam    dc.b    'dos.library',0
  1240.     cnop    0,4
  1241. gfxnam    dc.b    'graphics.library',0
  1242.     cnop    0,4
  1243.     
  1244.     cnop    0,4
  1245. gra.s
  1246. gracprscr
  1247.     dc.w    $8e,$3381,$90,$81c1,$92,$003c,$94,$00d0
  1248. gracprbpl
  1249.     dc.w    $100,$9000,$102,$0000,$104,$0020
  1250.     dc.w    $108,$0000,$10a,$0000
  1251. gracprpln
  1252.     dc.w    $e0,$0000,$e2,$0000
  1253.     dc.w    $e4,$0000,$e6,$0000
  1254.     dc.w    $e8,$0000,$ea,$0000
  1255.     dc.w    $ec,$0000,$ee,$0000
  1256.     dc.w    $f0,$0000,$f2,$0000
  1257.     dc.w    $f4,$0000,$f6,$0000
  1258. gracprcol
  1259.     dc.w    $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
  1260.     dc.w    $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
  1261.     dc.w    $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
  1262.     dc.w    $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
  1263. cprjmp
  1264.     dc.w    $080,0,$082,0
  1265. gra.e
  1266. gra.ql    equ    gra.e-gra.s        ;block lengte
  1267.  
  1268.  
  1269. cpr
  1270.     dc.w    $0001,$fffe
  1271.     dc.w    $09c,$8001        ;tbeint
  1272. cprspr
  1273.     dc.w    $120,$0000,$122,$0000
  1274.     dc.w    $124,$0000,$126,$0000
  1275.     dc.w    $128,$0000,$12a,$0000
  1276.     dc.w    $12c,$0000,$12e,$0000
  1277.     dc.w    $130,$0000,$132,$0000
  1278.     dc.w    $134,$0000,$136,$0000
  1279.     dc.w    $138,$0000,$13a,$0000
  1280.     dc.w    $13c,$0000,$13e,$0000
  1281.  
  1282. cprbuf
  1283.     dc.w    $8e,$3381,$90,$81c1,$92,$003c,$94,$00d0
  1284.     dc.w    $100,$9000,$102,$0000,$104,$0020
  1285.     dc.w    $108,$0000,$10a,$0000
  1286.     dc.w    $e0,$0000,$e2,$0000
  1287.     dc.w    $e4,$0000,$e6,$0000
  1288.     dc.w    $e8,$0000,$ea,$0000
  1289.     dc.w    $ec,$0000,$ee,$0000
  1290.     dc.w    $f0,$0000,$f2,$0000
  1291.     dc.w    $f4,$0000,$f6,$0000
  1292.     dc.w    $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
  1293.     dc.w    $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
  1294.     dc.w    $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
  1295.     dc.w    $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
  1296.     dc.w    $080,0,$082,0
  1297. cprbuf.e
  1298.  
  1299.     dc.w    $088,$0000        ;copjmp2
  1300.     dc.w    $080,0,$082,0        ;moet achter cprbck blijven !
  1301. cprbck
  1302. sprdat
  1303.     dc.w    $ffff,$fffe
  1304.  
  1305.  
  1306. prf_pat    equ    7            ;pref sample size
  1307. prf_patnum    equ    128        ;aantal songpos's
  1308. prf_len    equ    ((prf_pat*prf_patnum)+1)
  1309.  
  1310. prf_pos    equ    0            ;eff position (teller)
  1311.  
  1312. prf_effs    equ    1        ;start effect (*prf_patnum)
  1313. prf_effe    equ    2        ;end effect   (*prf_patnum)
  1314. prf_pri    equ    3            ;priority     (*prf_patnum)
  1315. prf_spd    equ    4            ;eff speed    (*prf_patnum)
  1316. prf_ani    equ    5            ;ani speed    (*prf_patnum)
  1317. prf_roth    equ    6        ;routine info (*prf_patnum)
  1318. prf_rotl    equ    7        ;routine info (*prf_patnum)
  1319.  
  1320. eff_num    equ    256            ;aantal effects
  1321.  
  1322. pic_wid        equ    4        ;wide in bytes
  1323. pic_hgt        equ    6        ;hoogte
  1324. pic_dpt        equ    8        ;number planes
  1325. pic_ani        equ    10        ;aantal effes (anim)
  1326. pic_vew        equ    12        ;viewmode
  1327. pic_cycstr    equ    14        ;cycle start (*4)
  1328. pic_cycend    equ    15        ;cycle end (*4)
  1329. pic_cycspd    equ    16        ;cycle speed (*4)
  1330. pic_cycadd    equ    17        ;cycle add (*4)
  1331. pic_palnum    equ    30        ;aantal kleuren
  1332. pic_pal        equ    32        ;palette start
  1333. pic_palsiz    equ    256*2        ;vaste palette size
  1334. pic_raw        equ    pic_pal+pic_palsiz    ;palette start
  1335.  
  1336. fil_namlen    equ    24        ;naamlengte
  1337. fil_len    equ    (fil_namlen+4+4)    ;effect info length
  1338. fil_num    equ    2+eff_num        ;aantal files
  1339. fil_fil    equ    0            ;file naam 
  1340. fil_dir    equ    24            ;pointer naar directory
  1341. fil_pnt    equ    28            ;pointer naar meminfo
  1342.  
  1343. palette    ds.w    64    ;palette
  1344.  
  1345. var_len        equ    $300        ;lengte vartabel
  1346.  
  1347. var__GfxBase    equ    $000        ;graphics lib
  1348. var_pic1    equ    $004        ;current picture
  1349. var_anispd1    equ    $008        ;animspeed
  1350. var_anitel1    equ    $00c        ;animspeed
  1351. var_cprbck    equ    $010        ;copperback
  1352. var_bck        equ    $014        ;background
  1353. var_pic2    equ    $018        ;current picture
  1354. var_ntsc    equ    $01c        ;ntsc/pal frequence
  1355. var_lnd        equ    $020        ;landscape
  1356. var_txt1    equ    $040        ;text
  1357. var_txt16    equ    15*4+var_txt1
  1358. var_vec1    equ    $080        ;vectors
  1359. var_vec16    equ    15*4+var_vec1
  1360. var_fon1    equ    $0c0        ;fonts
  1361. var_fon16    equ    15*4+var_fon1
  1362. var_cols1    equ    $100        ;colorsets
  1363. var_cols16    equ    15*4+var_cols1
  1364. var_obj1    equ    $180        ;objects
  1365. var_obj16    equ    15*4+var_obj1
  1366.  
  1367.     cnop    0,2
  1368. var    ds.b    $300    ;variabelen voor routines
  1369.  
  1370.     
  1371. ;    SECTION    10,CODE_C
  1372.         endc
  1373.  
  1374. ; this is the routine-source
  1375. ;**********************************************************************
  1376.  
  1377.         ifnd    rout
  1378. pic_wid        equ    4        ;wide in bytes
  1379. pic_hgt        equ    6        ;hoogte
  1380. pic_dpt        equ    8        ;number planes
  1381. pic_ani        equ    10        ;aantal effes (anim)
  1382. pic_vew        equ    12        ;viewmode
  1383. pic_cycstr    equ    14        ;cycle start (*4)
  1384. pic_cycend    equ    15        ;cycle end (*4)
  1385. pic_cycspd    equ    16        ;cycle speed (*4)
  1386. pic_cycadd    equ    17        ;cycle add (*4)
  1387. pic_palnum    equ    30        ;aantal kleuren
  1388. pic_pal        equ    32        ;palette start
  1389. pic_palsiz    equ    256*2        ;vaste palette size
  1390. pic_raw        equ    pic_pal+pic_palsiz    ;palette start
  1391.  
  1392. var_len        equ    $300        ;lengte vartabel
  1393.  
  1394. var__GfxBase    equ    $000        ;graphics lib
  1395. var_pic1    equ    $004        ;current picture
  1396. var_anispd1    equ    $008        ;animspeed
  1397. var_anitel1    equ    $00c        ;animspeed
  1398. var_cprbck    equ    $010        ;copperback
  1399. var_bck        equ    $014        ;background
  1400. var_pic2    equ    $018        ;current picture
  1401. var_ntsc    equ    $01c        ;ntsc/pal frequence
  1402. var_lnd        equ    $020        ;landscape
  1403. var_txt1    equ    $040        ;text
  1404. var_txt16    equ    15*4+var_txt1
  1405. var_vec1    equ    $080        ;vectors
  1406. var_vec16    equ    15*4+var_vec1
  1407. var_fon1    equ    $0c0        ;fonts
  1408. var_fon16    equ    15*4+var_fon1
  1409. var_cols1    equ    $100        ;colorsets
  1410. var_cols16    equ    15*4+var_cols1
  1411. var_obj1    equ    $180        ;objects
  1412. var_obj16    equ    15*4+var_obj1
  1413.  
  1414. vew_wid    equ    44
  1415. vew_hgt    equ    290
  1416. win_hgt    equ    117
  1417. win_str    equ    $1a
  1418.         endc
  1419.  
  1420. rot_vew    equ    0    ;$8004 <- nog niet goed !
  1421. rot_dpt    equ    1
  1422.  
  1423.         ifeq    rot_vew-0
  1424. rot_wid        equ    44
  1425. rot_hgt        equ    290
  1426. rot_cenx    equ    0
  1427. rot_ceny    equ    6
  1428. rot_siz        equ    -150
  1429.         endc
  1430.         ifeq    rot_vew-$8004
  1431. rot_wid        equ    44*2
  1432. rot_hgt        equ    290*2
  1433. rot_cenx    equ    4*8
  1434. rot_ceny    equ    5
  1435. rot_siz        equ    -100
  1436.         endc
  1437.     
  1438. lnd_sizx    equ    $4        ;size x
  1439. lnd_sizy    equ    $8        ;size y
  1440. lnd_palnum    equ    $10        ;aantal kleuren -1
  1441. lnd_pal        equ    $12        ;palette
  1442. lnd_wrl        equ    256*2+lnd_pal    ;worlddata
  1443.  
  1444. rot
  1445.     dc.l    'ROUT'
  1446. ProgStart:
  1447.     movem.l    d2-d7/a1-a6,-(sp)
  1448.  
  1449.     lea    rot,a3            ;program-base
  1450.     
  1451.     move.l    d0,d1
  1452.     divs    #128,d1
  1453.     and.l    #$ffff,d1
  1454.     move.l    d1,d7            ;
  1455.     muls    #128,d1
  1456.     sub.l    d1,d0
  1457.  
  1458.     move.l    d0,d1
  1459.     divs    #64,d1
  1460.     and.l    #$ffff,d1
  1461.     move.l    d1,rotmod-rot(a3)    ;mode
  1462.     muls    #64,d1
  1463.     sub.l    d1,d0
  1464.  
  1465.     move.l    d0,d1
  1466.     divs    #16,d1
  1467.     and.l    #$ffff,d1
  1468.     move.l    d1,d7            ;view size
  1469.     lsl.l    #1,d7            ;*2
  1470.     lea    rotsiztab,a1
  1471.     move.w    (a1,d7),Dif-rot(a3)
  1472.     muls    #16,d1
  1473.     sub.l    d1,d0
  1474.  
  1475.     move.l    d0,rotsintabpos-rot(a3)    ;beweeg vorm
  1476.     
  1477.     tst.l    var_lnd(a0)        ;is er een landfile ?
  1478.     beq    rot.return
  1479.     move.l    var_lnd(a0),a0        ;landscape data
  1480.     cmp.l    #'LAND',(a0)        ;still active ?
  1481.     bne    rot.return
  1482.  
  1483.     move.l    lnd_sizx(a0),sizx-rot(a3)
  1484.     move.l    lnd_sizy(a0),sizy-rot(a3)
  1485.     
  1486.     move.l    lnd_sizx(a0),d0        ;bereken DifW
  1487.     move.l    #128,d1
  1488.     clr.l    d2
  1489.     move.w    Dif-rot(a3),d2
  1490.     divs    d2,d1
  1491.     sub.w    d1,d0
  1492.     move.l    d0,DifW-rot(a3)
  1493.  
  1494.     lea    lnd_wrl(a0),a0
  1495.     move.l    a0,d0
  1496.     move.l    d0,World-rot(a3)
  1497.     
  1498. ;    tst.l    Ytable-rot(a3)        ;al gedaan ?
  1499. ;    bne    rot.done
  1500.  
  1501.     lea    rotytab,a0
  1502.     move.l    a0,d0
  1503.     move.l    d0,Ytable-rot(a3)
  1504.  
  1505.     lea    rotyadr,a0
  1506.     move.l    a0,d0
  1507.     move.l    d0,YTabAdr-rot(a3)
  1508.     add.l    #4*rot_dpt,d0
  1509.     move.l    d0,YTabAdrEnd-rot(a3)
  1510.  
  1511.     lea    rotdata,a0
  1512.     move.l    a0,d0
  1513.     move.l    d0,World_Data-rot(a3)
  1514.  
  1515.     lea    rotraw1,a1
  1516.     add.l    rotbuf-rot(a3),a1
  1517.     
  1518.     move.l    Ytable-rot(a3),a6
  1519.     move.l    YTabAdr-rot(a3),a5
  1520.     move.w    #rot_dpt-1,d1        ;depth-1
  1521. PInit_1:
  1522.     move.l    a6,(a5)+
  1523.     move.l    a1,a0            ;bitplane halen
  1524.     add.l    #rot_wid,a1
  1525.     move.l    #rot_hgt-1,d0        ;heigth-1
  1526. PInit_2:
  1527.     move.l    a0,(a6)+
  1528.     add.l    #rot_dpt*rot_wid,a0
  1529.     dbra    d0,PInit_2
  1530.     dbra    d1,PInit_1
  1531.  
  1532. rot.done
  1533.  
  1534. LoadLand:                ;load landscape
  1535.  
  1536. StartHere:                ;landscape groot laten zien
  1537. rotlop
  1538.     bsr.s    Hoofd3D
  1539.  
  1540. rot.return
  1541.     lea    rotpic1,a0        ;picture
  1542.     add.l    rotbuf-rot(a3),a0
  1543.     eor.l    #rotpic2-rotpic1,rotbuf-rot(a3)
  1544.     move.l    #0,d1            ;copper
  1545.     movem.l    (sp)+,d2-d7/a1-a6
  1546.     rts
  1547.     
  1548.  
  1549. Hoofd3D:                ;landscape 3d laten zien
  1550.     move.l    Ytable-rot(a3),a6
  1551.  
  1552. ;    move.l    Ytable(pc),a6
  1553. ;    add.l    YTabNr(pc),a6
  1554.     bsr    ScreenClear            ;scherm wissen
  1555.  
  1556.     move.l    World-rot(a3),a5
  1557.  
  1558.     lea    rotsintab,a1            ;sinus add tabel
  1559.     move.l    rotsintabpos-rot(a3),d0
  1560.     lsl.l    #3,d0                ;*8
  1561.     add.l    d0,a1
  1562.     
  1563.     lea    rotsin,a0            ;sinus data
  1564.     move.l    rotsinx-rot(a3),d0        ;sinus x pos
  1565.     clr.l    d2
  1566.     move.w    (a0,d0),d2
  1567. ;    move.l    sizx-rot(a3),d3            ;totale breedte
  1568.     move.l    DifW-rot(a3),d3            ;- x module
  1569.     muls    d3,d2                ;maal goede breedte
  1570.     divs    #256,d2                ;delen
  1571.     move.w    d2,2+AbsX-rot(a3)        ;set absx
  1572.  
  1573.     move.l    rotsiny-rot(a3),d1        ;sinus y pos
  1574.     clr.l    d2
  1575.     move.w    (a0,d1),d2
  1576. ;    move.l    sizy-rot(a3),d3            ;totale breedte
  1577.     move.l    DifW-rot(a3),d3            ;- x module
  1578.     muls    d3,d2                ;maal goede breedte
  1579.     divs    #256,d2                ;delen
  1580.     move.w    d2,2+AbsY-rot(a3)        ;set ansy
  1581.     
  1582.  
  1583.     move.l    rotsinx-rot(a3),d0        ;change x pos
  1584.     add.l    (a1),d0
  1585.     cmp.l    #((((rotsin.e-rotsin)/8)*2)*4),d0
  1586.     blt.s    rot.ga
  1587.     sub.l    #((((rotsin.e-rotsin)/8)*2)*4),d0
  1588. rot.ga
  1589.     move.l    d0,rotsinx-rot(a3)
  1590.  
  1591.     move.l    rotsiny-rot(a3),d1    ;change y pos
  1592.     add.l    4(a1),d1
  1593.     cmp.l    #((((rotsin.e-rotsin)/8)*2)*4),d1
  1594.     blt.s    rot.gb
  1595.     sub.l    #((((rotsin.e-rotsin)/8)*2)*4),d1
  1596. rot.gb
  1597.     move.l    d1,rotsiny-rot(a3)
  1598.  
  1599.     move.l    AbsX-rot(a3),d0        ;x,y view positie
  1600.     muls    (sizx+2)-rot(a3),d0
  1601.     add.l    d0,a5
  1602.     move.l    AbsY-rot(a3),d0
  1603.     add.l    d0,a5
  1604.  
  1605.     move.l    rotmod-rot(a3),d0    ;mode halen
  1606.     tst.b    d0
  1607.     beq.s    rotpix            ;pixels ?
  1608.     cmp.b    #1,d0
  1609.     beq    rotlin            ;lijntjes ?
  1610.     rts
  1611.  
  1612. rotpix                    ;pixels
  1613.     move.w    #-64,X-rot(a3)        ; -64
  1614. rotpix_LoopX:
  1615.     move.w    #64,Y-rot(a3)
  1616.     move.l    World_Data-rot(a3),a4
  1617. rotpix_LoopY:
  1618.     move.w    X-rot(a3),d0
  1619.     move.w    Y-rot(a3),d2
  1620.     clr.w    d1
  1621.     move.b    (a5)+,d1        ;z-waarde halen
  1622.     lsr.b    #1,d1            ;/2
  1623.  
  1624.     ifge    rot_dpt-2
  1625.     move.b    d1,d7
  1626.     lsr.b    #7-rot_dpt,d7        ;kleur
  1627.     beq.s    rotpixcol.da        ;overslaan ?
  1628.     endc
  1629.     
  1630.     moveq    #0,d3
  1631.     move.w    Hoogte-rot(a3),d4
  1632.     move.w    #rot_siz,d5        ; -120 -150
  1633.     sub.w    d5,d2
  1634.     tst.w    d2
  1635.     beq.s    rotCentProjEnd
  1636.     sub.w    d3,d0
  1637.     sub.w    d4,d1
  1638.     muls    d5,d0
  1639.     muls    d5,d1
  1640.     divs    d2,d0
  1641.     divs    d2,d1
  1642.     sub.w    d0,d3
  1643.     sub.w    d1,d4
  1644.     move.w    d3,d0
  1645.     move.w    d4,d1
  1646.     neg.w    d1
  1647. rotCentProjEnd:
  1648.  
  1649.     add.w    #rot_wid*4+rot_cenx,d0        ;centreer x1,y1
  1650.     add.w    #(rot_hgt*rot_ceny)/10,d1
  1651.  
  1652.     ifeq    rot_dpt-1        ;no-colorversion
  1653.     move.w    d1,d6            ;y-pos
  1654.     lsl.w    #2,d6            ;*4
  1655.     move.l    (a6,d6),a1        ;y regel halen
  1656.     move.w    d0,d6            ;x-pos
  1657.     lsr.w    #3,d6            ;/8
  1658.     and.w    #7,d0
  1659.     eor.b    #7,d0
  1660.     bset    d0,(a1,d6)
  1661.     endc
  1662.     
  1663.     ifge    rot_dpt-2        ;color version
  1664.     move.w    d1,d6            ;y-pos
  1665.     lsl.w    #2,d6            ;*4
  1666.     move.l    (a6,d6),a1        ;y regel halen
  1667.     move.w    d0,d6            ;x-pos
  1668.     lsr.w    #3,d6            ;/8
  1669.     and.w    #7,d0
  1670.     eor.b    #7,d0
  1671.  
  1672.     ifeq    rot_dpt-2        ;color version 4
  1673.     btst    #1,d7            ;kleur    
  1674.     beq.s    rotpixcol.ca
  1675.     bset    d0,(a1,d6)
  1676. rotpixcol.ca
  1677.     btst    #0,d7            ;kleur    
  1678.     beq.s    rotpixcol.cb
  1679.     bset    d0,rot_wid(a1,d6)
  1680. rotpixcol.cb
  1681.     endc
  1682.  
  1683.     ifeq    rot_dpt-3        ;color version 8
  1684.     btst    #2,d7            ;kleur    
  1685.     beq.s    rotpixcol.ca
  1686.     bset    d0,(a1,d6)
  1687. rotpixcol.ca
  1688.     btst    #0,d7            ;kleur    
  1689.     beq.s    rotpixcol.cb
  1690.     bset    d0,rot_wid(a1,d6)
  1691. rotpixcol.cb
  1692.     btst    #1,d7            ;kleur    
  1693.     beq.s    rotpixcol.cc
  1694.     bset    d0,2*rot_wid(a1,d6)
  1695. rotpixcol.cc
  1696.     endc
  1697.  
  1698.     ifeq    rot_dpt-5        ;color big version
  1699.     add.l    #rot_wid*2,a1
  1700.     btst    #4,d7            ;kleur    
  1701.     beq.s    rotpixcol.ca
  1702.     bset    d0,-2*rot_wid(a1,d6)
  1703. rotpixcol.ca
  1704.     btst    #0,d7            ;kleur    
  1705.     beq.s    rotpixcol.cb
  1706.     bset    d0,-1*rot_wid(a1,d6)
  1707. rotpixcol.cb
  1708.     btst    #1,d7            ;kleur    
  1709.     beq.s    rotpixcol.cc
  1710.     bset    d0,(a1,d6)
  1711. rotpixcol.cc
  1712.     btst    #2,d7            ;kleur    
  1713.     beq.s    rotpixcol.cd
  1714.     bset    d0,1*rot_wid(a1,d6)
  1715. rotpixcol.cd
  1716.     btst    #3,d7            ;kleur    
  1717.     beq.s    rotpixcol.ce
  1718.     bset    d0,2*rot_wid(a1,d6)
  1719. rotpixcol.ce
  1720.     endc
  1721.  
  1722. rotpixcol.da
  1723.     endc
  1724.     
  1725.     clr.l    d0
  1726.     move.w    Dif-rot(a3),d0        ;stap naar volgende scherm positie
  1727.     sub.w    d0,Y-rot(a3)
  1728.     cmp.w    #-64,Y-rot(a3)        ;laatste y punt ?
  1729.     bne    rotpix_LoopY
  1730.  
  1731.     add.w    d0,X-rot(a3)
  1732.  
  1733.     add.l    DifW-rot(a3),a5        ;stap naar volgend kaart-regel
  1734.     cmp.w    #64,X-rot(a3)        ;laatste x punt ?
  1735.     bne    rotpix_LoopX
  1736.     rts
  1737.     
  1738.  
  1739.  
  1740.  
  1741. rotlin                    ;lijntjes
  1742.     move.w    #-64,X-rot(a3)        ; -64
  1743. rotlin_LoopX:
  1744.     move.w    #64,Y-rot(a3)
  1745.     move.l    World_Data-rot(a3),a4
  1746. rotlin_LoopY:
  1747.     move.w    X-rot(a3),d0
  1748.     move.w    Y-rot(a3),d2
  1749.     clr.w    d1
  1750.     move.b    (a5)+,d1        ;z-waarde halen
  1751.     lsr.b    #1,d1            ;/2
  1752.     bsr    CentralProj
  1753.  
  1754.     add.w    #rot_wid*4+rot_cenx,d0        ;centreer x1,y1
  1755.     add.w    #(rot_hgt*rot_ceny)/10,d1
  1756.     move.w    OldX-rot(a3),d2        ;x2,y2
  1757.     move.w    OldY-rot(a3),d3
  1758.     move.w    d0,OldX-rot(a3)
  1759.     move.w    d1,OldY-rot(a3)
  1760.     cmp.w    #64,Y-rot(a3)        ;eerste y punt = overslaan
  1761.     beq.s    rotlin_Go_on
  1762.  
  1763.     bsr    Drawline        ;lijn tekenen
  1764.  
  1765. rotlin_Go_on:
  1766.     move.w    (a4),d0
  1767.     move.w    2(a4),d1
  1768.     move.w    OldX-rot(a3),d2
  1769.     move.w    OldY-rot(a3),d3
  1770.     move.w    d2,(a4)+
  1771.     move.w    d3,(a4)+
  1772.     cmp.w    #-64,X-rot(a3)        ;eerste x punt = overslaan
  1773.     beq.s    rotlin_Go_On2
  1774.  
  1775.     bsr    Drawline
  1776.  
  1777. rotlin_Go_On2:
  1778.     clr.l    d0
  1779.     move.w    Dif-rot(a3),d0        ;stap naar volgende scherm positie
  1780.     sub.w    d0,Y-rot(a3)
  1781.     cmp.w    #-64,Y-rot(a3)        ;laatste y punt ?
  1782.     bne    rotlin_LoopY
  1783.  
  1784.     add.w    d0,X-rot(a3)
  1785.     add.l    DifW-rot(a3),a5        ;stap naar volgend kaart-regel
  1786.     cmp.w    #64,X-rot(a3)        ;laatste x punt ?
  1787.     bne    rotlin_LoopX
  1788.  
  1789.     bsr.s    blitwait
  1790.     rts
  1791.     
  1792. ;    move.b    $BFEC01,d0        ;read keyboard
  1793. ;    ror.b    #1,d0
  1794. ;    cmp.b    #$AF,d0    ; F1
  1795. ;    bne.s    F2
  1796. ;    move.w    #4,Dif
  1797. ;    move.l    #224,DifW
  1798. ;F2:
  1799. ;    cmp.b    #$AE,d0    ; F2
  1800. ;    bne.s    F3
  1801. ;    move.w    #8,Dif
  1802. ;    move.l    #240,DifW
  1803. ;F3:
  1804. ;    cmp.b    #$AD,d0    ; F3
  1805. ;    bne.s    F4
  1806. ;    move.w    #16,Dif
  1807. ;    move.l    #248,DifW
  1808. ;F4:
  1809. ;    cmp.b    #$AC,d0    ; F4
  1810. ;    bne.s    ESC
  1811. ;    move.w    #32,Dif
  1812. ;    move.l    #252,DifW
  1813. ;ESC:
  1814. ;    cmp.b    #$BA,d0    ; Esc
  1815. ;    bne.s    Skey
  1816. ;    move.l    #0,d0
  1817. ;    rts
  1818. ;
  1819. ;Skey:
  1820. ;    cmp.b    #$DE,d0    ; 'S'
  1821. ;    bne.s    F8
  1822. ;    move.l    #2,d0
  1823. ;F8:
  1824. ;    cmp.b    #$A8,d0    ; F8
  1825. ;    bne.s    F10
  1826. ;    move.w    OldToeval(pc),Toeval
  1827. ;    move.w    #1,d0
  1828. ;    rts
  1829. ;F10:
  1830. ;    cmp.b    #$A6,d0        ; F10
  1831. ;    bne.s    T1_5
  1832. ;    move.w    Teller(pc),Toeval
  1833. ;    move.w    Toeval(pc),OldToeval
  1834. ;    move.l    #1,d0
  1835. ;    rts
  1836. ;T1_5:
  1837. ;    cmp.b    #$FE,d0        ; 1,2,3,4,5
  1838. ;    bhi.s    F9
  1839. ;    cmp.b    #$F9,d0
  1840. ;    bls.s    F9
  1841. ;    sub.b    #$FA,d0
  1842. ;    move.b    d0,Size
  1843. ;F9:
  1844. ;    cmp.b    #$A7,d0
  1845. ;    bne    Loop3d_1
  1846. ;    move.l    #1,d0
  1847. ;    move.w    Toeval(pc),OldToeval
  1848. ;    rts
  1849.  
  1850. BlitClear:
  1851.     move.l    (a6),$DFF050        ;blit clear
  1852.     move.l    (a6),$DFF054
  1853.     move.l    #(rot_dpt-1)*rot_wid,$DFF064
  1854.     move.w    #$900,$DFF040
  1855.     move.w    #0,$DFF042
  1856.     move.w    #(rot_hgt*64)+(rot_wid/2),$DFF058
  1857.     bsr.s    blitwait
  1858.     rts
  1859.  
  1860. blitwait:
  1861.     btst    #6,($DFF002).l        ;blt wait
  1862.     bne.s    blitwait
  1863.     rts
  1864.  
  1865. ScreenClear:                ;clear screen
  1866.     move.l    YTabAdr-rot(a3),a0
  1867.     move.w    #rot_dpt-1,d0
  1868. LPos:
  1869.     move.l    (a0)+,a6
  1870.     bsr.s    BlitClear
  1871.     dbra    d0,LPos
  1872.     rts
  1873.  
  1874. Verschil:
  1875.     sub.l    d2,d0
  1876.     bsr.s    SubM
  1877.     neg.l    d0
  1878.     bsr.s    SubM
  1879.     neg.l    d0
  1880.     rts
  1881.  
  1882. SubM:
  1883.     cmp.l    #$7F,d0
  1884.     ble.s    Kleiner
  1885.     move.l    #$FF,d2
  1886.     sub.l    d2,d0
  1887. Kleiner:
  1888.     rts
  1889.  
  1890. CentralProj:
  1891.     move.w    #0,d3
  1892.     move.w    Hoogte-rot(a3),d4
  1893.     move.w    #rot_siz,d5    ; -120 -150
  1894.     sub.w    d5,d2
  1895.     tst.w    d2
  1896.     beq.s    CentProjEnd
  1897.     sub.w    d3,d0
  1898.     sub.w    d4,d1
  1899.     muls    d5,d0
  1900.     muls    d5,d1
  1901.     divs    d2,d0
  1902.     divs    d2,d1
  1903.     sub.w    d0,d3
  1904.     sub.w    d1,d4
  1905.     move.w    d3,d0
  1906.     move.w    d4,d1
  1907.     neg.w    d1
  1908. CentProjEnd:
  1909.     rts
  1910.  
  1911. Drawline:
  1912.     cmp.w    d0,d2
  1913.     bne.s    WDraw1
  1914.     cmp.w    d1,d3
  1915.     bne.s    WDraw1
  1916.     rts
  1917.  
  1918. WDraw1:
  1919.     tst.w    d1
  1920.     bmi.s    Clipping
  1921.     tst.w    d3
  1922.     bmi.s    Clipping1
  1923.     bra.s    WDraw
  1924.  
  1925. Clipping:
  1926.     tst.w    d3
  1927.     bpl.s    Clipping1
  1928.     rts
  1929.  
  1930. Clipping1:
  1931.     move.w    d0,d4
  1932.     sub.w    d2,d4
  1933.     move.w    d3,d5
  1934.     muls    d5,d4
  1935.     sub.w    d1,d5
  1936.     divs    d5,d4
  1937.     add.w    d2,d4
  1938.     tst.w    d1
  1939.     bmi.s    PKt1
  1940.     move.w    d4,d2
  1941.     clr.w    d3
  1942.     bra.s    Drawline
  1943.  
  1944. PKt1:
  1945.     move.w    d4,d0
  1946.     clr.w    d1
  1947.     bra.s    Drawline
  1948.  
  1949. WDraw:
  1950.     move.w    #rot_dpt*rot_wid,a1
  1951.     clr.l    d6
  1952.     move.w    d1,d6
  1953.     lsl.w    #2,d6
  1954.     move.l    0(a6,d6.l),d4
  1955.     moveq    #-$10,d5
  1956.     and.w    d0,d5
  1957.     lsr.w    #3,d5
  1958.     add.w    d5,d4
  1959.     clr.l    d5
  1960.     sub.w    d1,d3
  1961.     roxl.b    #1,d5
  1962.     tst.w    d3
  1963.     bge.s    GrY
  1964.     neg.w    d3
  1965. GrY:
  1966.     sub.w    d0,d2
  1967.     roxl.b    #1,d5
  1968.     tst.w    d2
  1969.     bge.s    GrX
  1970.     neg.w    d2
  1971. GrX:
  1972.     move.w    d3,d1
  1973.     sub.w    d2,d1
  1974.     bge.s    Gd
  1975.     exg    d2,d3
  1976. Gd:
  1977.     roxl.b    #1,d5
  1978.     move.b    OktTab(pc,d5.l),d5
  1979.     add.w    d2,d2
  1980.     move.l    a5,-(sp)
  1981.     move.l    #$dff000,a5
  1982. WBlit:
  1983.     btst    #6,$002(a5)
  1984.     bne.s    WBlit
  1985.     move.w    d2,$062(a5)
  1986.     sub.w    d3,d2
  1987.     bge.s    Voorz
  1988.     or.b    #$40,d5
  1989. Voorz:
  1990.     move.w    d2,$052(a5)
  1991.     sub.w    d3,d2
  1992.     move.w    d2,$064(a5)
  1993.     move.w    #$8000,$074(a5)
  1994.     move.w    #$FFFF,$072(a5)
  1995.     move.w    #$FFFF,$044(a5)
  1996.     and.w    #15,d0
  1997.     ror.w    #4,d0
  1998.     or.w    #$BCA,d0
  1999.     move.w    d0,$040(a5)
  2000.     move.w    d5,$042(a5)
  2001.     move.l    d4,$048(a5)
  2002.     move.l    d4,$054(a5)
  2003.     move.w    a1,$060(a5)
  2004.     move.w    a1,$066(a5)
  2005.     lsl.w    #6,d3
  2006.     addq.w    #2,d3
  2007.     move.w    d3,$058(a5)
  2008.     move.l    (sp)+,a5
  2009.     rts
  2010.  
  2011. OktTab:
  2012.     dc.w    $111,$915,$519,$D1D
  2013.  
  2014. X:        dc.w    0
  2015. Y:        dc.w    0
  2016. OldX:        dc.w    0
  2017. OldY:        dc.w    0
  2018. World_Data:    dc.l    0
  2019. AbsX:        dc.l    0
  2020. AbsY:        dc.l    0
  2021. Hoogte:        dc.w    119    ;-49 tot 119
  2022.  
  2023. sizx        dc.l    0
  2024. sizy        dc.l    0
  2025.  
  2026. Ytable:        dc.l    0
  2027. YTabAdr:    dc.l    0
  2028. YTabAdrEnd:    dc.l    0
  2029. YTabNr:        dc.l    0
  2030.  
  2031. World:        dc.l    0
  2032. Dif:        dc.w    8    ;4    ;8    scherm stap
  2033. DifW:        dc.l    242    ;226    ;242    kaart-regel module stap
  2034.  
  2035. rotbuf        dc.l    0
  2036. rotsinx        dc.l    0
  2037. rotsiny        dc.l    (((rotsin.e-rotsin)/8)*2)
  2038. rotsintabpos    dc.l    0
  2039. rotmod        dc.l    0
  2040.  
  2041. ;        Dif    Difw
  2042. rotsiztab
  2043.     dc.w    16,8,4,2
  2044.     
  2045. ;        xadd    yadd
  2046. rotsintab
  2047.     dc.l    4*2,    4*2
  2048.     dc.l    2*2,    4*2
  2049.     dc.l    4*2,    6*2
  2050.  
  2051.     rept    16-3
  2052.     dc.l    2*2,    2*2
  2053.     endr
  2054. rotsin
  2055.        dc.w       128,129,130,131,132,134,135,136,137,138,139,140
  2056.        dc.w       141,142,143,145,146,147,148,149,150,151,152,153
  2057.        dc.w       154,155,157,158,159,160,161,162,163,164,165,166
  2058.        dc.w       167,168,169,170,171,172,174,175,176,177,178,179
  2059.        dc.w       180,181,182,183,184,185,186,187,188,189,190,191
  2060.        dc.w       192,192,193,194,195,196,197,198,199,200,201,202
  2061.        dc.w       203,204,204,205,206,207,208,209,210,210,211,212
  2062.        dc.w       213,214,215,215,216,217,218,219,219,220,221,222
  2063.        dc.w       222,223,224,225,225,226,227,227,228,229,229,230
  2064.        dc.w       231,231,232,233,233,234,235,235,236,236,237,237
  2065.        dc.w       238,239,239,240,240,241,241,242,242,243,243,244
  2066.        dc.w       244,244,245,245,246,246,247,247,247,248,248,248
  2067.        dc.w       249,249,249,250,250,250,251,251,251,251,252,252
  2068.        dc.w       252,252,253,253,253,253,253,254,254,254,254,254
  2069.        dc.w       254,254,255,255,255,255,255,255,255,255,255,255
  2070.        dc.w       255,255,255,255,255,255,255,255,255,255,255,254
  2071.        dc.w       254,254,254,254,254,254,253,253,253,253,253,252
  2072.        dc.w       252,252,252,251,251,251,251,250,250,250,249,249
  2073.        dc.w       249,248,248,248,247,247,247,246,246,245,245,244
  2074.        dc.w       244,244,243,243,242,242,241,241,240,240,239,239
  2075.        dc.w       238,237,237,236,236,235,235,234,233,233,232,231
  2076.        dc.w       231,230,229,229,228,227,227,226,225,225,224,223
  2077.        dc.w       222,222,221,220,219,219,218,217,216,215,215,214
  2078.        dc.w       213,212,211,210,210,209,208,207,206,205,204,204
  2079.        dc.w       203,202,201,200,199,198,197,196,195,194,193,192
  2080.        dc.w       192,191,190,189,188,187,186,185,184,183,182,181
  2081.        dc.w       180,179,178,177,176,175,174,172,171,170,169,168
  2082.        dc.w       167,166,165,164,163,162,161,160,159,158,157,155
  2083.        dc.w       154,153,152,151,150,149,148,147,146,145,143,142
  2084.        dc.w       141,140,139,138,137,136,135,134,132,131,130,129
  2085.        dc.w       128,127,126,125,124,122,121,120,119,118,117,116
  2086.        dc.w       115,114,113,111,110,109,108,107,106,105,104,103
  2087.        dc.w       102,101,99,98,97,96,95,94,93,92,91,90
  2088.        dc.w       89,88,87,86,85,84,82,81,80,79,78,77
  2089.        dc.w       76,75,74,73,72,71,70,69,68,67,66,65
  2090.        dc.w       65,64,63,62,61,60,59,58,57,56,55,54
  2091.        dc.w       53,52,52,51,50,49,48,47,46,46,45,44
  2092.        dc.w       43,42,41,41,40,39,38,37,37,36,35,34
  2093.        dc.w       34,33,32,31,31,30,29,29,28,27,27,26
  2094.        dc.w       25,25,24,23,23,22,21,21,20,20,19,19
  2095.        dc.w       18,17,17,16,16,15,15,14,14,13,13,12
  2096.        dc.w       12,12,11,11,10,10,9,9,9,8,8,8
  2097.        dc.w       7,7,7,6,6,6,5,5,5,5,4,4
  2098.        dc.w       4,4,3,3,3,3,3,2,2,2,2,2
  2099.        dc.w       2,2,1,1,1,1,1,1,1,1,1,1
  2100.        dc.w       1,1,1,1,1,1,1,1,1,1,1,2
  2101.        dc.w       2,2,2,2,2,2,3,3,3,3,3,4
  2102.        dc.w       4,4,4,5,5,5,5,6,6,6,7,7
  2103.        dc.w       7,8,8,8,9,9,9,10,10,11,11,12
  2104.        dc.w       12,12,13,13,14,14,15,15,16,16,17,17
  2105.        dc.w       18,19,19,20,20,21,21,22,23,23,24,25
  2106.        dc.w       25,26,27,27,28,29,29,30,31,31,32,33
  2107.        dc.w       34,34,35,36,37,37,38,39,40,41,41,42
  2108.        dc.w       43,44,45,46,46,47,48,49,50,51,52,52
  2109.        dc.w       53,54,55,56,57,58,59,60,61,62,63,64
  2110.        dc.w       64,65,66,67,68,69,70,71,72,73,74,75
  2111.        dc.w       76,77,78,79,80,81,82,84,85,86,87,88
  2112.        dc.w       89,90,91,92,93,94,95,96,97,98,99,101
  2113.        dc.w       102,103,104,105,106,107,108,109,110,111,113,114
  2114.        dc.w       115,116,117,118,119,120,121,122,124,125,126,127
  2115.        dc.w       128
  2116. rotsin.e
  2117.  
  2118. rotyadr        ds.l    rot_dpt            ;plane offsets
  2119. rotytab        ds.l    rot_dpt*rot_hgt        ;plane y offsets
  2120. rotdata        ds.w    64            ;words
  2121.  
  2122. ;pic_wid        equ    4        ;wide in bytes
  2123. ;pic_hgt        equ    6        ;hoogte
  2124. ;pic_dpt        equ    8        ;number planes
  2125. ;pic_ani        equ    10        ;aantal effes (anim)
  2126. ;pic_vew        equ    12        ;viewmode
  2127. ;pic_cycstr        equ    14        ;cycle start (*4)
  2128. ;pic_cycend        equ    15        ;cycle end (*4)
  2129. ;pic_cycspd        equ    16        ;cycle speed (*4)
  2130. ;pic_cycadd        equ    17        ;cycle add (*4)
  2131. ;pic_palnum        equ    30        ;aantal kleuren
  2132. ;pic_pal        equ    32        ;palette start
  2133. ;pic_palsiz        equ    256*2        ;vaste palette size
  2134. ;pic_raw        equ    pic_pal+pic_palsiz    ;palette start
  2135.  
  2136. rotpic1
  2137.     dc.l    'PICT'
  2138.     dc.w    rot_wid,rot_hgt,rot_dpt,1,rot_vew
  2139.     ds.b    4*4
  2140.  
  2141.     ifeq    rot_dpt-1
  2142.     dc.w    2-1
  2143.     dc.w    $000,$FFF
  2144.     ds.w    256-2
  2145.     endc
  2146.  
  2147.     ifeq    rot_dpt-2
  2148.     dc.w    4-1
  2149.     dc.w    $000,$0f0,$c70,$777
  2150.     ds.w    256-4
  2151.     endc
  2152.  
  2153.     ifeq    rot_dpt-3
  2154.     dc.w    8-1
  2155.     dc.w    $000,$050,$0a0,$0f0
  2156.     dc.w    $c70,$c70,$777,$777
  2157.     ds.w    256-8
  2158.     endc
  2159.  
  2160.     ifeq    rot_dpt-5
  2161.     dc.w    32-1
  2162.     dc.w    $000,$050,$060,$070,$080,$090,$0a0,$0b0
  2163.     dc.w    $0c0,$0d0,$0f0,$2e0,$4b0,$690,$880,$a70
  2164.     dc.w    $c70,$c70,$c70,$c70,$d80,$d80,$d80,$d80
  2165.     dc.w    $c71,$b62,$a63,$964,$866,$777,$777,$777
  2166.     ds.w    256-32
  2167.     endc
  2168.  
  2169.  
  2170. rotraw1
  2171.     ds.b    rot_wid*rot_hgt*rot_dpt
  2172.  
  2173. rotpic2
  2174.     dc.l    'PICT'
  2175.     dc.w    rot_wid,rot_hgt,rot_dpt,1,rot_vew
  2176.     ds.b    4*4
  2177.  
  2178.     ifeq    rot_dpt-1
  2179.     dc.w    2-1
  2180.     dc.w    $000,$FFF
  2181.     ds.w    256-2
  2182.     endc
  2183.  
  2184.     ifeq    rot_dpt-2
  2185.     dc.w    4-1
  2186.     dc.w    $000,$0f0,$c70,$777
  2187.     ds.w    256-4
  2188.     endc
  2189.  
  2190.     ifeq    rot_dpt-3
  2191.     dc.w    8-1
  2192.     dc.w    $000,$050,$0a0,$0f0
  2193.     dc.w    $c70,$c70,$777,$777
  2194.     ds.w    256-8
  2195.     endc
  2196.  
  2197.     ifeq    rot_dpt-5
  2198.     dc.w    32-1
  2199.     dc.w    $000,$050,$060,$070,$080,$090,$0a0,$0b0
  2200.     dc.w    $0c0,$0d0,$0f0,$2e0,$4b0,$690,$880,$a70
  2201.     dc.w    $c70,$c70,$c70,$c70,$d80,$d80,$d80,$d80
  2202.     dc.w    $c71,$b62,$a63,$964,$866,$777,$777,$777
  2203.     ds.w    256-32
  2204.     endc
  2205.  
  2206. rotraw2
  2207.     ds.b    rot_wid*rot_hgt*rot_dpt
  2208.  
  2209. rot.e
  2210.  
  2211. ;**********************************************************************
  2212.  
  2213. ;and here are the incbin-files....
  2214.  
  2215.         ifd    rout
  2216.         cnop    0,2
  2217. rotinc
  2218.         incbin    'ram:forest.lnd'
  2219.         endc
  2220.         
  2221.